@L}5 _$% l0$)$$Hȱ$ UhL" `e$$%`$%`  R@P!( L(1   Y I`  d  Ld M * @  $ % CC$$)%1 Udߥ$9%: !0 S$% DD˙`  }J)Lr d M * @  $ % CC$$)%1 Udߥ$9%: !0 S$%} DD˙`  }J)Lr J  ((  p L ()   J}L= ( L 0q A    IB JC;? D W } LL  ` W )LA!  ߰")-݆ p" } $G@LL 08`Q")<2Q0 -G$Ș݆ UL# ; p8(()(0ʥ)NQ` }$GȘ݆LU )L ݆ L GȘ ݆LL )W>Z   HH)H }p h  hyhy D L> L JJ    ! LA*` BF }7'8  M HN H` 8 Z  \LdJJ!"! GFE@F (!L }EE !E^ ^ E E7EȩEdE/EȩE  D } .L }  ;F d  ;?F7F? ( .   Z D LL d } . D  L    p  E` , d)  D L) 0BM݊L݉} ML  N݆ L NLML [ TEqEHȱEqEh 0Gȹ G} HLL GɛL  LFREE SECTORS G) *Gȩ GȽG GȌ*jj >G} C8jJ3j2CD( C202C ԠBX` N 1? l LlD:RAMDISK}.COMLu L1 L ;LHL  T`  `1  ɐ     `TU  } L ? .  t`GBJ ~DEHI B V0dV!}QDEHI VF9 ,0 ,0 s0hhL  L` H hDHEh"}DEL8HI4 0 HI,0 0  9 .G VLO#},0 L4*IJ`llD1:AUTORUN.SYSNEED MEM.SAV TO LOAD THIS FILE.D1:MEM.SAV J y08 B|DEHI$} V0 0`B;DEL`?<0LV`@ʆ v s? F0Ξ05: [ BDEHI%} VY8 B V  @  /DE `E:D1:DUP.SYSERROR-SAVING USER MEMORY ON DISKTYPE Y TO &}STILL RUN DOS B;DE J  (` 9 V⪍ ઍ  -'}LLu ÝDEHILV 9 .l 9 .l  `` s$B BH(}I|DE V BLV nB,DE JLV B V BLVDEIʩ BꭝLu  } 3E:}DISK OPERATING SYSTEM II VERSION COPYRIGHT 1984 ATARI CORP.A. DISK DIRECTORY I. FORMAT DISKB. RUN CARTRIDG*}E J. DUPLICATE DISKC. COPY FILE K. BINARY SAVED. DELETE FILE(S) L. BINARY LOADE. RENAME FILE M. RUN AT ADDRES+}SF. LOCK FILE N. CREATE MEM.SAVG. UNLOCK FILE O. DUPLICATE FILEH. WRITE DOS FILES P. FORMAT SINGLEL !N',}#"&))9(&*)/h)''-&؆莟R'S  vL/ˢ L }Insert DOS 2.0s, type Y Λx -}DEfHI 1莏#q! @ y0ɛ8A0,' ȅ 1 1ild! 1L!NO SUCH ITEMSELECT.} ITEM OR FOR MENU! 0 .z:*{}.|{ 1 0 0JB 18L%|DL/}%DIRECTORY--SEARCH SPEC,LIST FILE?[# 0 0 &|D3" 1L!NOT A DISK FILEN !B 1L!E# 1 !BD0}ED:}:1BJ|DE 1DEBHI 1 h0ߢ 0.1}  0?詛 1 y0YЛ 1 ;#L" ;#L! BL1TYPE "Y" TO DELETE...DELETE FILE SPEC2}COPY--FROM, TO?OPTION NOT ALLOWED736 FREE SECTORS COPYING---D1:DIRECK.COMl# 0|D .L/%#3}##JB|DE 1BHID#E 1#0: B 1L!#͑### B 1#c$0SY4}S1}:## # # .#Ƚ# # 𩛙## 1,#PD#ELJ- <.BJD#E 5}1 1HH 0hh|DL%1}:̳# L% #D#EL% 1 0 . .0O% 1L!WILD CARDS NOT A6}LLOWED IN DESTINATION 0 <.|K}N 2 FORMAT. t* 5) 1L!`) 0NΞ 0 L1) 1 L!BAD LOAD FILELOAD FROM WHAT FILE?) 0 ?}0#B 1L!WHAT FILE TO LOCK?) 0 0$B 1L!WHAT FILE TO UNLOCK?DUP DISK-SOURCE,DEST DRIVES?TYPE "Y" IF OK TO US@}E PROGRAM AREACAUTION: A "Y" INVALIDATES MEM.SAV.FE! +L1   `*  70 2 2A} 0.* 1 y0 0)INSERT BOTH DISKS, TYPE RETURN^, 1 y038逍 N, 1L! ,B}C, t*  Lx+, 0 ^, 1 y0 , ,0,0 ,L+ ,I0 ,Vǭ0C}Ξ, 0 }, 1 y0C,ШC, 0K'!" H H 'h h Lx+!EF 5L1L!D,I,HhD}` NOT ENOUGH ROOMINSERT SOURCE DISK,TYPE RETURNINSERT DESTINATION DISK,TYPE RETURNE}`  `8 rL1`-* 1P* 1 y0Y`hhL!NAME OF FILE TO MOVE?- 0 0|DL% <.F},^ 1 70 0 .@L# .BJ 1  DEHIB V L1 ,} 1 70,L.  G}JB|,#P#DE 1 HI BDEHHII 1 B 1 ,^ 1 70,0La- B V,#PH},^ 1 70 0L#L!-* 1P* 1 y0Yj383}mm ݭI}}`8}``|* ? ɛ,`|:-)| / 1L!`DESTINATION CANT BE DOJ}S.SYS0 0H{ 24Δ 28/L!/) 2 Π 2 0 ξK}hAΞB,0 J 1 BDEHI,HÝDE 1HIHIDELSAVE-GIVE L}FILE,START,END(,INIT,RUN)O S0 1`BDEPHI V` S0H 1 L!M}0 0 1L~0`PLEASE TYPE 1 LETTER,0`hhL! 70 1L0L<1 ,;ɛ7,"ɛ:ݦ1ݥN}A"D|ݤD|ȩ:|ȩ|ɛ,,(/+.ީ1 1,ɛ`轤{NAMEO} TOO LONG B VL!` L1I H1EΝDL1|mDiE` V0`8d/8 i:222 1 LP}!ERROR- 138ɛ+,' 20*.. өr2 1``2TOO MANY DIGITSINVALID HEXAQ}DECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8uR} ECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8u;---------------------------------------------------------------- ; Atari OS defs from SYSMAC.SML inserted here ; ; VECTOR TT}ABLE EDITRV =$E400 ;EDITOR SCRENV =$E410 ;TELEVISION SCREEN KEYBDV =$E420 ;KEYBOARD PRINTV =$E430 ;PRINTER CASETV =$U}E440 ;CASSETTE ; JUMP VECTOR TABLE DISKIV =$E450 ;DISK INITIALIZATION DSKINV =$E453 ;DISK INTERFACE CIOV =$E456 ;CIV}O ROUTINE SIOV =$E459 ;SIO ROUTINE SETVBV =$E45C ;SET VERTICAL BLANK VECTORS SYSVBV =$E45F ;SYSTEM VERTICAL BLANK ROUTIW}NE XITVBV =$E462 ;EXIT VERTICAL BLANK ROUTINE SIOINV =$E465 ;SIO INIT SENDEV =$E468 ;SEND ENABLE ROUTINE INTINV =$E46B X} ;INTERRUPT HANDLER INIT CIOINV =$E46E ;CIO INIT BLKBDV =$E471 ;BLACKBOARD MODE WARMSV =$E474 ;WARM START ENTRY POINT Y}COLDSV =$E477 ;COLD START ENTRY POINT RBLOKV =$E47D ;CASSETTE READ BLOCK VECTOR DSOPIV =$E480 ;CASSETTE OPEN FOR INPUT Z}VECTOR ; SOME USEFUL INTERNAL ROUTINES ;KGETCH =$F6E2 ;GET CHAR FROM KEYBOARD only on 800 EOUTCH =$F6A4 ;OUTPUT CHAR TO[} SCREEN PUTLIN =$F385 ;OUTPUT LINE TO IOCB#0 ; COMMAND CODES FOR IOCB OPEN =$03 ;OPEN FOR INPUT/OUTPUT GETREC =$05 ;G\}ET RECORD (TEXT) GETCHR =$07 ;GET CHARACTER(S) PUTREC =$09 ;PUT RECORD (TEXT) PUTCHR =$0B ;PUT CHARACTER(S) CLOSE =$0C ]} ;CLOSE DEVICE STATIS =$0D ;STATUS REQUEST SPECIL =$0E ;SPECIAL ENTRY COMMANDS ; SPECIAL ENTRY COMMANDS DRAWLN =$11 ^};DRAW LINE FILLIN =$12 ;DRAW LINE WITH RIGHT FILL RENAME =$20 ;RENAME DISK FILE DELETE =$21 ;DELETE DISK FILE FORMAT =$_}22 ;FORMAT DISK LOCKFL =$23 ;LOCK FILE (READ ONLY) UNLOCK =$24 ;UNLOCK FILE POINT =$25 ;POINT SECTOR NOTE =$26 ;NOT`}E SECTOR CCIO =$28 ;CONCURRENT I/O MODE IOCFRE =$FF ;IOCB "FREE" ; AUX1 VALUES FOR OPEN APPEND =$01 ;OPEN FOR APPENa}D DIRECT =$02 ;OPEN FOR DIRECTORY ACCESS OPNIN =$04 ;OPEN FOR INPUT OPNOT =$08 ;OPEN FOR OUTPUT OPNINO =OPNIN!OPNOT ;Ob}PEN FOR INPUT/OUTPUT MXDMOD =$10 ;OPEN FOR MIXED MODE INSCLR =$20 ;OPEN WITHOUT CLEARING SCREEN ; OS STATUS CODES SUCCEc}S =$01 ;SUCCESSFUL OPERATION BRKABT =$80 ;(128) BREAK KEY ABORT PRVOPN =$81 ;(129) IOCB ALREADY OPEN NONDEV =$82 ;(13d}0) NON-EX DEVICE WRONLY =$83 ;(131) IOCB OPENED FOR WRITE ONLY NVALID =$84 ;(132) INVALID COMMAND NOTOPN =$85 ;(133) DEe}VICE OR FILE NOT OPEN BADIOC =$86 ;(134) INVALID IOCB NUMBER RDONLY =$87 ;(135) IOCB OPENED FOR READ ONLY EOFERR =$88 ;f}(136) END OF FILE TRNRCD =$89 ;(137) TRUNCATED RECORD TIMOUT =$8A ;(138) DEVICE TIMEOUT DNACK =$8B ;(139) DEVICE DOES Ng}OT ACK COMMAND FRMERR =$8C ;(140) SERIAL BUS FRAMING ERROR CRSROR =$8D ;(141) CURSOR OUT OF RANGE OVRRUN =$8E ;(142) SEh}RIAL BUS DATA OVERRUN CHKERR =$8F ;(143) SERIAL BUS CHECKSUM ERROR DERROR =$90 ;(144) DEVICE ERROR (OPERATION INCOMPLETE)i} BADMOD =$91 ;(145) BAD SCREEN MODE NUMBER FNCNOT =$92 ;(146) FUNCTION NOT IN HANDLER SCRMEM =$93 ;(147) INSUFFICIENT Mj}EMORY FOR SCREEN MODE ; PAGE 0 LOCATIONS LINZBS =$00 ;LINBUG STORAGE ; THESE LOCS ARE NOT CLEARED CASINI =$02 ;CASSk}ETTE INIT LOC RAMLO =$04 ;RAM POINTER FOR MEM TEST TRAMSZ =$06 ;TEMP LOC FOR RAM SIZE TSTDAT =$07 ;RAM TEST DATA LOC ;l} CLEARED ON COLDSTART ONLY WARMST =$08 ;WARM START FLAG BOOTQ =$09 ;SUCCESSFUL BOOT FLAG DOSVEC =$0A ;DOS START VECTOm}R DOSINI =$0C ;DOS INIT ADDRESS APPMHI =$0E ;APPLICATION MEM HI LIMIT ; CLEARED ON COLD OR WARM START INTZBS =$10 ; n}START OF OS RAM CLEAR LOC => $7F POKMSK =$10 ;SYSTEM MASK FOR POKEY IRQ ENABLE BRKKEY =$11 ;BREAK KEY FLAG RTCLOK =$12 o};REAL TIME CLOCK (60HZ OR 16.66666 MS) BUFADR =$15 ;INDIRECT BUFFER ADDRESS REG ICCOMT =$17 ;COMMAND FOR VECTOR HANDLER Dp}SKFMS =$18 ;DISK FILE MANAGER POINTER DSKUTL =$1A ;DISK UTILITIES POINTER PTIMOT =$1C ;PRINTER TIME OUT REGISTER PBPNT q}=$1D ;PRINT BUFFER POINTER PBUFSZ =$1E ;PRINT BUFFER SIZE PTEMP =$1F ;TEMP REG ZIOCB =$20 ;PAGE 0 I/O CONTROL BLOCK Ir}OCBSZ =16 ;NUMBER OF BYTES / IOCB MAXIOC =8*IOCBSZ ;LENGTH OF IOCB AREA IOCBAS =ZIOCB ICHIDZ =$20 ;HANDLER INDEX NUMBERs} ($FF := IOCB FREE) ICDNOZ =$21 ;DEVICE NUMBER (DRIVE NUMBER) ICCOMZ =$22 ;COMMAND CODE ICSTAZ =$23 ;STATUS OF LAST IOCt}B ACTION ICBALZ =$24 ;BUFFER ADDRESS (LOW) ICBAHZ =$25 ; " " (HIGH) ICPTLZ =$26 ;PUT BYTE ROUTINE ADDRESS - 1 ICPTHu}Z =$27 ICBLLZ =$28 ;BUFFER LENGTH (LOW) ICBLHZ =$29 ; " " (HIGH) ICAX1Z =$2A ;AUX INFO ICAX2Z =$2B ICSPRZ =$2C v};SPARE BYTES (CIO LOCAL USE) ICIDNO =ICSPRZ+2 ;IOCB LUMBER * 16 CIOCHR =ICSPRZ+3 ;CHARACTER BYTE FOR CURRENT OPERATION STAw}TUS =$30 ;INTERNAL STATUS STORAGE CHKSUM =$31 ;CHECKSUM (SINGLE BYTE SUM WITH CARRY) BUNRLO =$32 ;POINTER TO DATA BUFFEx}R (LO BYTE) BUFRHI =$33 ;POINTER TO DATA BUFFER (HI BYTE) BFENLO =$34 ;NEXT BYTE PAST END OF BUFFER (LO BYTE) BNENHI =$35y} ;NEXT BYTE PAST END OF BUFFER (HI BYTE) CRETRY =$36 ;NUMBER OF COMMAND FRAM RETRIES DRETRY =$39 ;NUMBER OF DEVICE RETRz}IES BUFRFL =$38 ;DATA BUFFER FULL FLAG RECVDN =$39 ;RECEIVE DONE FLAG XMTDON =$3A ;XMIT DONE FLAG CHKSNT =$3B ;CHECKS{}UM SENT FLAG NOCKSM =$3C ;NO CHECKSUM FOLLOWS DATA FLAG BPTR =$3D ;BUFFER POINTER (CASSETTE) FTYPE =$3E ;FILE TYPE (SH|}ORT IRG/LONG IRG) FEOF =$3F ;END OF FILE FLAG (CASSETTE) FREQ =$40 ;FREQ COUNTER FOR CONSOLE SPEAKER SOUNDR =$41 ;NOISY}} I/O FLAG. (ZERO IS QUIET) CRITIC =$42 ;CRITICAL CODE IF NON-ZERO) FMSZPG =$43 ;DISK FILE MANAGER SYSTEM STORAGE (7 BYTE~}S) CKEY =$4A ;SET WHEN GAME START PRESSED CASSBT =$4B ;CASSETTE BOOT FLAG DSTAT =$4C ;DISPLAY STATUS ATRACT =$4D ;AT}TRACT MODE FLAG DRKMSK =$4E ;DARK ATTRACT MASK COLRSH =$4F ;ATTRACT COLOR SHIFTER (XOR'D WITH PLAYFIELD) TMPCHR =$50 ;}TEMP CHAR STORAGE (DISPLAY HANDLER) HOLD1 =$51 ;TEMP STG (DISPLAY HANDLER) LMARGN =$52 ;LEFT MARGIN RMARGN =$53 ;RIGHT }MARGIN ROWCRS =$54 ;CURSOR COUNTERS COLCRS =$55 DINDEX =$57 ;DISPLAY INDEX (VARIOUS QUANTS) SAVMSC =$58 OLDROW =$5A ;PR}EVIOUS ROW/COL OLDCOL =$5B OLDCHR =$5D ;DATA UNDER CURSOR OLDADR =$5E NEWROW =$60 ;POINT DRAWS TO HERE NEWCOL =$61 LOGCOL} =$63 ;POINTS AT COLUMN IN LOGICAL LINE ADRESS =$64 ;INDIRECT POINTER MLTTMP =$66 ;MULTIPLY TEMP OPNTMP =MLTTMP ;FIRS}T BYTE IS USED IN OPEN AS TEMP SAVADR =$68 RAMTOP =$6A ;RAM SIZE DEFINED BY POWER ON LOGIC BUFCNT =$6B ;BUFFER COUNT BUFS}TR =$6C ;EDITOR GETCH POINTER BITMSK =$6E ;BIT MASK SHFAMT =$6F ;OUTCHR SHIFT ROWAC =$70 ;USED BY "DRAW" COLAC =$72 }ENDPT =$74 DELTAR =$76 DELTAC =$77 ROWINC =$79 COLINC =$7A SWPFLG =$7B ;NON-0 IF TXT AND RAM SWAPPED HOLDCH =$7C ;CH BEFO}RE CNTL & SHFT PROCESSING IN KGETCH INSDAT =$7D ;INSERT CHAR SAVE COUNTR =$7E ;DRAW COUNTER ;;; $80 TO $FF ARE RESERVED }FOR USER APPLICATIONS ; PAGE 2 LOCATIONS INTABS =$200 ;INTERRUPT TABLE VDSLST =$200 ;DISPLAY LIST NMI VECTOR VPRCED =$2}02 ;PROCEED LINE IRQ VECTOR VINTER =$204 ;INTERRUPT LINE IRQ VECTOR VBREAK =$206 ;"BRK" VECTOR VKEYBD =$208 ;POKEY KE}YBOARD IRQ VECTOR VSERIN =$20A ;POKEY SERIAL INPUT READY VSEROR =$20C ;POKEY SERIAL OUTPUT READY VSEROC =$20E ;POKEY SE}RIAL OUTPUT DONE VTIMR1 =$210 ;POKEY TIMER 1 IRQ VTIMR2 =$212 ;POKEY TIMER 2 IRQ VTIMR4 =$214 ;POKEY TIMER 4 IRQ (DO NO}T USE) VIMIRQ =$216 ;IMMEDIATE IRQ VECTOR CDTMV1 =$218 ;COUNT DOWN TIMER 1 CDTMV2 =$21A ;COUNT DOWN TIMER 2 CDTMV3 =$21}C ;COUNT DOWN TIMER 3 CDTMV4 =$21E ;COUNT DOWN TIMER 4 CDTMV5 =$220 ;COUNT DOWN TIMER 5 VVBLKI =$222 ;IMMEDIATE VERTI}CAL BLANK NMI VECTOR VVBLKD =$224 ;DEFERRED VERTICAL BLANK NMI VECTOR CDTMA1 =$226 ;COUNT DOWN TIMER 1 JSR ADDRESS CDTMA2} =$228 ;COUNT DOWN TIMER 2 JSR ADDRESS CDTMF3 =$22A ;COUNT DOWN TIMER 3 FLAG SRTIMR =$22B ;SOFTWARE REPEAT TIMER CDTMF4} =$22C ;COUNT DOWN TIMER 4 FLAG INTEMP =$22D ;IAN'S TEMP (???) CDTMF5 =$22E ;COUNT DOWN TIMER 5 FLAG SDMCTL =$22F ;SA}VE DMACTL REGISTER DMACTL =$D400 ; the real DMA control reg SDLSTL =$230 ;SAVE DISPLAY LIST (LOW) SDLSTH =$231 ;SAVE DI}SPLAY LIST (HIGH) SSKCTL =$232 ;SKCTL REGISTER RAM LPENH =$234 ;LIGHT PEN HORIZ VALUE LPENV =$235 ;LIGHT PEN VERT VALU}E ; ($236 - $239 SPARE) CDEVIC =$23A ;COMMAND FRAME BUFFER - DEVICE CCOMND =$23B ;COMMAND CAUX1 =$23C ;COMMAND AUX }BYTE 1 CAUX2 =$23D ;COMMAND AUX BYTE 2 TEMP =$23E ;YES ERRFLG =$23F ;ERROR FLAG - ANY DEVICE ERROR EXCEPT TIMEOUT DFLA}GS =$240 ;DISK FLAGS FROM SECTOR ONE DBSECT =$241 ;NUMBER OF DISK BOOT SECTORS BOOTAD =$242 ;ADDRESS FOR DISK BOOT LOAD}ER COLDST =$244 ;COLDSTART FLAG (1 = DOING COLDSTART) ;($245 SPARE) DSKTIM =$246 ;DISK TIME OUT REG LINBUF =$247 ;C}HAR LINE BUFFER (40 BYTES) GPRIOR =$26F ;GLOBAL PRIORITY CELL PADDL0 =$270 ;POT 0 SHADOW PADDL1 =$271 ;POT 1 SHADOW PA}DDL2 =$272 ;POT 2 SHADOW PADDL3 =$273 ;POT 3 SHADOW PADDL4 =$274 ;POT 4 SHADOW PADDL5 =$275 ;POT 5 SHADOW PADDL6 =$27}6 ;POT 6 SHADOW PADDL7 =$277 ;POT 7 SHADOW STICK0 =$278 ;JOYSTICK 0 SHADOW STICK1 =$279 ;JOYSTICK 1 SHADOW STICK2 =$2}7A ;JOYSTICK 2 SHADOW STICK3 =$27B ;JOYSTICK 3 SHADOW PTRIG0 =$27C ;PADDLE 0 TRIGGER PTRIG1 =$27D ;PADDLE 1 TRIGGER P}TRIG2 =$27E ;PADDLE 2 TRIGGER PTRIG3 =$27F ;PADDLE 3 TRIGGER PTRIG4 =$280 ;PADDLE 4 TRIGGER PTRIG5 =$281 ;PADDLE 5 TR}IGGER PTRIG6 =$282 ;PADDLE 6 TRIGGER PTRIG7 =$283 ;PADDLE 7 TRIGGER STRIG0 =$284 ;JOYSTICK 0 TRIGGER STRIG1 =$285 ;JO}YSTICK 1 TRIGGER STRIG2 =$286 ;JOYSTICK 2 TRIGGER STRIG3 =$287 ;JOYSTICK 3 TRIGGER CSTAT =$288 ;(UNUSED) WMODE =$289 } ;R/W FLAG FOR CASSETTE BLIM =$28A ;BUFFER LIMIT (CASSETTE) ;($28B - $28F SPARE) TXTROW =$290 ;TEXT ROWCRS TXTCOL =$2}91 ;TEXT ROWCOL TINDEX =$293 ;TEXT INDEX TXTMSC =$294 ;FOOLS CONVRT INTO NEW MSC TXTOLD =$296 ;OLDROW & OLDCOL FOR TE}XT (AND THEN SOME) TMPX1 =$29C HOLD3 =$29D SUBTMP =$29E HOLD2 =$29F DMASK =$2A0 TMPLBT =$2A1 ESCFLG =$2A2 ;ESCAPE FLAG TABM}AP =$2A3 ;TAB BUFFER LOGMAP =$2B2 ;LOGICAL LINE START BIT MAP INVFLG =$2B6 ;INVERSE VIDEO FLAG (ATARI KEY) FILFLG =$2B7} ;RIGHT FILL FLAG FOR DRAW TMPROW =$2B8 TMPCOL =$2B9 SCRFLG =$2BB ;SET IF SCROLL OCCURS HOLD4 =$2BC ;MORE DRAW TEMPS HO}LD5 =$2BD SHFLOK =$2BE ;SHIFT LOCK KEY BOTSCR =$2BF ;BOTTOM OF SCREEN (24 NORM, 4 SPLIT) PCOLR0 =$2C0 ;P0 COLOR PCOLR1} =$2C1 ;P1 COLOR PCOLR2 =$2C2 ;P2 COLOR PCOLR3 =$2C3 ;P3 COLOR COLOR0 =$2C4 ;COLOR 0 COLOR1 =$2C5 COLOR2 =$2C6 COLOR3} =$2C7 COLOR4 =$2C8 ;BACKGROUND ;($2C9 - $2DF SPARE) GLBABS =$2E0 ;GLOBAL VARIABLES ;($2E0 - $2E3 SPARE) RAMSIZ =}$2E4 ;RAM SIZE (HI BYTE ONLY) MEMTOP =$2E5 ;TOP OF AVAILABLE MEMORY MEMLO =$2E7 ;BOTTOM OF AVAILABLE MEMORY ;($2E9 }SPARE) DVSTAT =$2EA ;STATUS BUFFER CBAUDL =$2EE ;CASSETTE BAUD RATE (LO BYTE) CBAUDH =$2EF ; " " " (HI BYTE}) CRSINH =$2F0 ;CURSOR INHIBIT (00 = CURSOR ON) KEYDEL =$2F1 ;KEY DELAY CH1 =$2F2 CHACT =$2F3 ;CHACTL REGISTER (SHADOW)} CHBAS =$2F4 ;CHBAS REGISTER (SHADOW) ;($2F5 - $2F9 SPARE) CHAR =$2FA ATACHR =$2FB ;ATASCII CHARACTER CH =$2FC ;GLO}BAL VARIABLE FOR KEYBOARD FILDAT =$2FD ;RIGHT FILL DATA (DRAW) DSPFLG =$2FE ;DISPLAY FLAG: DISP CONTROLS IF NON-ZERO SSFL}AG =$2FF ;START/STOP FLAG (CNTL-1) FOR PAGING ; PAGE 3 LOCATIONS DCB =$300 ;DEVICE CONTROL BLOCK DDEVIC =$300 ;BUS I.}D. NUMBER DUNIT =$301 ;UNIT NUMBER DCOMND =$302 ;BUS COMMAND DSTATS =$303 ;COMMAND TYPE/STATUS RETURN DBUFLO =$304 ;D}ATA BUFFER POINTER DBUFHI =$305 ; ... DTIMLO =$306 ;DEVICE TIME OUT IN 1 SEC. UNITS DUNUSE =$307 ;UNUSED DBYTLO =$308 } ;BYTE COUNT DBYTHI =$309 ; ... DAUX1 =$30A ;COMMAND AUXILLARY BYTES DAUX2 =$30B ; ... TIMER1 =$30C ;INITIAL TIMER V}ALUE ADDCOR =$30E ;ADDITION CORRECTION CASFLG =$30F ;CASSETTE MODE WHEN SET TIMER2 =$310 ;FINAL TIME VALUE (USED TO COM}PUTE BAUD RATE) TEMP1 =$312 ;TEMP LOCATIONS TEMP2 =$314 ; ... TEMP3 =$315 ; ... SAVIO =$316 ;SAVE SERIAL IN DATA PORT} TIMFLG =$317 ;TIME OUT FLAG FOR BAUD RATE CORRECTION STACKP =$318 ;SIO STACK POINTER SAVE LOC TSTAT =$319 ;TEMP STATUS} LOC HATABS =$31A ;HANDLER ADDRESS TABLE MAXDEV =$21 ;MAXIMUM HANDLER ADDRESS INDEX ; IOCB OFFSETS IOCB =$340 ;I/O} CONTROL BLOCKS ICHID =$340 ;HANDLER INDEX ($FF = FREE) ICDNO =$341 ;DEVICE NUMBER (DRIVE NUMBER) ICCOM =$342 ;COMMAND }CODE ICSTA =$343 ;STATUS ICBAL =$344 ;BUFFER ADDRESS ICBAH =$345 ; ... ICPTL =$346 ;PUT BYTE ROUTINE ADDRESS - 1 ICPT}H =$347 ; ... ICBLL =$348 ;BUFFER LENGTH ICBLH =$349 ; ... ICAX1 =$34A ;AUXILLARY INFO ICAX2 =$34B ; ... ICSPR =$34}C ;4 SPARE BYTES PRNBUF =$3C0 ;PRINTER BUFFER ;($3EA - $3FC SPARE) ; PAGE 4 LOCATIONS CASBUF =$3FD ;CASSETTE BUF}FER ; USER AREA STARTS HERE AND GOES TO THE END OF PAGE 5 USAREA =$480 ;ATASCII CHARACTER DEFS ATCLR =$7D ;CLEAR SCREEN} CHARACTER ATRUB =$7E ;BACK SPACE (RUBOUT) ATTAB =$7F ;TAB ATEOL =$9B ;END-OF-LINE ATBEL =$FD ;CONSOLE BELL ATURW =$1}C ;UP-ARROW ATDRW =$1D ;DOWN-ARROW ATLRW =$1E ;LEFT-ARROW ATRRW =$1F ;RIGHT-ARROW ; USEFUL VALUES LEDGE =2 ;LMARG}N'S INITIAL VALUE REDGE =39 ;RMARGN'S INITIAL VALUE ZPC =0 ;PC CODE FOR ZERO PAGE PC P6PC =1 ;PC CODE FOR PAGE 6 PPC =2 } ;PC CODE FOR PROGRAM MEMORY ; ; Stuff for audio ; AUDF1 =$D200 ; Voice 1 Freq AUDC1 =$D201 ; Voice 1 control ;INIT PC VAL}UES CURPC =0 PC0 =0 ;PAGE ZERO PC1 =$600 ;PAGE 6 PC PC2 =$3800 ;PROGRAM PC ; ; End of SYSMAC.SML ;-----------------------}----------------------------------------- ; ; Rs232 driver autoloader, stolen from Vterm ; *=$37F2 rsinit: LDA #$}00 ; $37F2 STA WARMST ; $37F4 LDA DOSINI ; $37F6 STA oinita ; $37F8 LDA DOSINI+1 ; $37FB STA oinita+1 ;} $37FD LDA #$50 ; $3800 STA DDEVIC ; $3802 LDA #$01 ; $3805 STA DUNIT ; $3807 LDA #$3F ; $380A STA DCOMN}D ; $380C LDA #$40 ; $380F STA DSTATS ; $3811 LDA #$05 ; $3814 STA DTIMLO ; $3816 STA DBUFHI ; $3819 LDA }#$00 ; $381C STA DBUFLO ; $381E STA DBYTHI ; $3821 STA DAUX1 ; $3824 STA DAUX2 ; $3827 LDA #$0C ; $382A S}TA DBYTLO ; $382C JSR SIOV ; $382F BPL init1 ; $3832 JMP fail1 ; $3834 init1: LDX #$0B ; $3837 init2: LDA $05}00,X ; $3839 STA DCB,X ; $383C DEX ; $383F BPL init2 ; $3840 JSR SIOV ; $3842 BMI fail1 ; $3845 JSR $0506} ; $3847 JMP init3 ; $384A fail1: JMP fail2 ; $384D ; LSR $54,X ; $3850 ; EOR $52 ; $3852 ; EOR $203A ; $3854} ; SEC ; $3857 ; AND $30,X ; $3858 ; JSR $6F6E ; $385A ; .BYTE $74 ; $385D ; JSR $6572 ; $385E ; .BYTE }$73 ; $3861 ; BVS $38D3 ; $3862 ; ROR $6964 ; $3864 ; ROR $9B67 ; $3867 failmsg: .byte "K65: 850 not respond}ing",ATEOL fail2: LDX #$00 ; $386A LDA #$09 ; $386C STA ICCOM,X ; $386E LDA #failmsg\ ; $3871 STA ICBAL,X ; $38}73 LDA #failmsg^ ; $3876 STA ICBAH,X ; $3878 LDA #fail2-failmsg ; $387B STA ICBLL,X ; $387D LDA #$00 ; $3880 S}TA ICBLH,X ; $3882 JSR CIOV ; $3885 RTS ; $3888 init3: LDA DOSINI ; $3889 STA minita ; $388B LDA DOSINI+}1 ; $388E STA minita+1 ; $3890 LDY #$43 ; $3893 LDX #$00 ; $3895 init4: LDA inipatch,X ; $3897 STA (DOSINI),}Y ; $389A INY ; $389C INX ; $389D CPX #$08 ; $389E BNE init4 ; $38A0 LDA #$44 ; $38A2 CLC } ; $38A4 ADC DOSINI ; $38A5 STA DOSINI ; $38A7 LDA DOSINI+1 ; $38A9 ADC #$00 ; $38AB STA DOSINI+1 ; } $38AD JMP myinit ; $38AF ; ; This thing gets patched into the DOS init vector ; inipatch: RTS ; $38B2 JSR 0000 }; do original init stuff $38B3 oinita = .-2 ; addr to store old init vector myinit: JMP 0000 ; do new init stuff $38B6 min}ita = .-2 ; addr to store new init vector .BYTE $00 ; $38B9 *=$02E2 ; load-time init vector .word rsinit ; $}02E2 .-2 ; addr to store new init vector .BYTE $00 ; $38B9 *=$02E2 ; load-time init vector .word rsinit ; $/* makebin.c Make a .out file into a binary suitable for loading on Atari makebin infile outfile */ #include FILE * inf, * outf; char segment[16384]; /* current segment buffer */ int seg_idx; /* next byte pos in seg */ int seg_ }start_pc; char hexchar[16]; /* = "0123456789ABCDEF"; */ int hexac = 0; /* hex accumulator */ int hexp = 0; /* if anyth }ing in accumulator */ int pc, expected_pc; /* pc we're at, pc we expect */ int in_segment = 0; /* if currently inside segm }ent */ hexdigit(c) char c; /* * returns parsed digit */ { int i; for(i = 0; i < 16; i++) { if (c == hexcha }r[i]) return(i); } printf("Bogus hex char %c\n", c); } outbyte(c) char c; { fputc(c, outf); /* printf("%x\n", c); } */ } /* * flush segment buf */ endsegment() { int i; int end_pc; if (in_segment != 0) { end_pc = seg_sta }rt_pc + seg_idx - 1; outbyte(255); /* write atari load header */ outbyte(255); outbyte((seg_start_pc & 25 }5)); outbyte((seg_start_pc >> 8)); outbyte((end_pc & 255)); outbyte((end_pc >> 8)); for(i = 0; i < s }eg_idx; i++) outbyte((segment[i]) & 255); }; in_segment = 0; } startsegment(new_pc) int new_pc; { endsegment(); s }eg_idx = 0; seg_start_pc = new_pc; in_segment = 1; } checkpc(new_pc) int new_pc; { if ((!in_segment) || (new_pc != seg }_start_pc + seg_idx)) startsegment(new_pc); } storebyte(ch) char ch; { int new_pc; if((seg_idx >= 16384)) { } new_pc = seg_start_pc + 16384; endsegment(); startsegment(new_pc); }; segment[seg_idx] = ch; seg_idx } += 1; } FILE * fopen_carefully(char * fn, char * mode) { FILE * f = fopen(fn, mode); if (!f) { printf("Can't } open '%s'\n", fn); exit(1); } return(f); } main(int argc, char ** argv) { int ch; if (argc < 3) { } printf("Try makebin infile outfile ...\n"); exit(1); } inf = fopen_carefully(argv[1], "r"); outf = fopen_care }fully(argv[2], "wb"); hexchar[0] = '0'; hexchar[1] = '1'; hexchar[2] = '2'; hexchar[3] = '3'; hexchar[4] = '4'; }hexchar[5] = '5'; hexchar[6] = '6'; hexchar[7] = '7'; hexchar[8] = '8'; hexchar[9] = '9'; hexchar[10] = 'A'; hexc }har[11] = 'B'; hexchar[12] = 'C'; hexchar[13] = 'D'; hexchar[14] = 'E'; hexchar[15] = 'F'; in_segment = 0; while }((ch = fgetc(inf)) != EOF) switch (ch) { case '0': case '1': case '2': case '3': ca }se '4': case '5': case '6': case '7': case '8': case '9': case 'A': case 'B': } case 'C': case 'D': case 'E': case 'F': hexac = (hexac * 16) + hexdigit(ch); hexp = 1; break; cas }e ':': checkpc(hexac); hexac = 0; hexp = 0; break; case ' ': case '\n': if(hexp) storebyte(hexac); hexac } = 0; hexp = 0; break; default: printf("Bogus char %c\n", ch); }; /* end of switch */ endsegment(); /* }flush output */ exit(0); } default: printf("Bogus char %c\n", ch); }; /* end of switch */ endsegment(); /* # # Make file for Kermit-65 # all : k65.com k65nr.com k65nr.com : kermit65.m65 as6502 -niolv kermit65.m65 > k65.lst makeb}in 65c02.out k65nr.com rm 65c02.out loadrs.com : loadrs.m65 as6502 -niolv loadrs.m65 > loadrs.lst makebin 65c02.out loadr}s.com rm 65c02.out k65.com : k65nr.com loadrs.com bincat k65.com loadrs.com k65nr.com release : k65.com arc a k65v37 k65}.com k65nr.com readme.v36 readme.v37 arc a k65doc kermit.doc arc a k65src kermit65.m65 loadrs.m65 makefile makebin.c 37 k65wB%DOS SYSB*)DUP SYSB~SLOADRS M65BMAKEBIN C BMAKEFILE